package com.Advance.InnerClass_.anonymous_interface;

public class Anonymous_Class {
    public static void main(String[] args) {
        Outer01 outer01 = new Outer01();
        outer01.method();
    }
}
class Outer01{
    private int a = 1;
    public void method(){
        //匿名内部类的引出
        //对于传统方法来调用cry()方法
        //接口类型可以指向已实现该接口类的对象实例——体现多态
//        IA tiger = new Tiger();
//        tiger.cry();//这是传统方法，想调用接口中的方法，需要一个类来实现接口中的方法
        //现在需求：我只需要调用一次就行了，不想再进行创建对象的操作，这时可以利用匿名内部类
        //接口的匿名内部类
        //说明：tiger的编译类型是IA，运行类型是匿名内部类，如果想查看一下其运行类型可以通过getclass方法来查看
        //实际上来说，虽说是匿名内部类，但其是有名字的，由系统分配
        /*
        public XXX implements IA{
             @Override
            public void cry() {
                System.out.println("老虎叫唤");
            }
         */
        //jdk底层在创建匿名内部类 Outer04%1，立即马上就创建了 Outer04%1实例，并且把地址返回给tiger
        //注意：匿名内部类使用一次，就不能再使用
        IA tiger = new IA(){
            @Override
            public void cry() {
                System.out.println("老虎叫唤");
            }
        };
        tiger.cry();
        System.out.println("tiger的运行类型= "+ tiger.getClass());//此处就可以生成出类的名称
    }
}


interface IA{
    void cry();
}
//class Tiger implements IA{
//    @Override
//    public void cry() {
//        System.out.println("老虎叫唤...");
//    }
//}

